package de.htw.ejb.model;

import de.htw.ejb.model.Adresse;
import de.htw.ejb.model.Bestellung;
import de.htw.ejb.model.Mindestbestellwert;
import de.htw.ejb.model.listener.KundeMonitor;

import java.io.Serializable;
import java.util.Set;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EntityListeners;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;

/**
 * Diese Klasse implementiert die datentechnische Darstellung eines Kunden.
 * 
 * @author Thomas Schoenfeld
 * @version 20130318-01
 */
@EntityListeners( KundeMonitor.class )
@Entity
@NamedQueries( {
		@NamedQuery( name = "selectKundeById", query = "SELECT k FROM Kunde k WHERE k.id = :id" ),
		@NamedQuery( name = "selectKundeByName", query = "SELECT k FROM Kunde k WHERE k.name = :name" ) } )
public class Kunde implements Serializable
{
	
	public static final String	SELECT_BY_ID			= "selectKundeById";
	public static final String	SELECT_BY_NAME		= "selectKundeByName";
	
	public static final String	ID								= "id";
	public static final String	NAME							= "name";
	
	private static final long		serialVersionUID	= 1L;
	@Id
	@GeneratedValue( strategy = GenerationType.AUTO )
	@Column( name = "id" )
	private int									kundennummer;
	private String							telefonnummer;
	private String							name;
	private String							vorname;
	@OneToOne( optional = false, cascade = { CascadeType.ALL } )
	private Adresse							adresse;
	private Mindestbestellwert	mindestbestellwert;
	@OneToMany( mappedBy = "kunde" )
	private Set<Bestellung>			bestellungen;
	
	public int getKundennummer()
	{
		return kundennummer;
	}
	
	public void setKundennummer( int kundennummer )
	{
		this.kundennummer = kundennummer;
	}
	
	public String getTelefonnummer()
	{
		return telefonnummer;
	}
	
	public void setTelefonnummer( String telefonnummer )
	{
		this.telefonnummer = telefonnummer;
	}
	
	public String getName()
	{
		return name;
	}
	
	public void setName( String name )
	{
		this.name = name;
	}
	
	public String getVorname()
	{
		return vorname;
	}
	
	public void setVorname( String vorname )
	{
		this.vorname = vorname;
	}
	
	public Adresse getAdresse()
	{
		return adresse;
	}
	
	public void setAdresse( Adresse adresse )
	{
		this.adresse = adresse;
	}
	
	public Mindestbestellwert getMindestbestellwert()
	{
		return mindestbestellwert;
	}
	
	public void setMindestbestellwert( Mindestbestellwert mindestbestellwert )
	{
		this.mindestbestellwert = mindestbestellwert;
	}
	
	public Set<Bestellung> getBestellungen()
	{
		return bestellungen;
	}
	
	public void setBestellungen( Set<Bestellung> bestellungen )
	{
		this.bestellungen = bestellungen;
	}
	
	@Override
	public String toString()
	{
		return "Kunde [kundennummer=" + kundennummer + ", telefonnummer="
				+ telefonnummer + ", name=" + name + ", vorname=" + vorname
				+ ", adresse=" + adresse + ", mindestbestellwert=" + mindestbestellwert
				+ ", bestellungen=" + bestellungen + "]";
	}
}
